#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdio_ext.h>
#define FIM_AVAIL -1
#include "consulta.h"

/** @brief Funcao para criar a avail list, com cabeca apontando para -001.
                                         */
void cria_avail();

/** @brief Funcao para remover obras da base e dos indices.

	
  	@param obras O vetor contendo os indices primarios.
	@param sk_titulo Vetor contendo indices secundarios, por titulo.
	@param sk_tipo Vetor contendo indices secundarios, por tipo.
	@param sk_autor Vetor contendo indices secundarios, por autor.
	@param sk_ano Vetor contendo indices secundarios, por ano.
  	@param tamanho Tamanho do vetor com os indices primarios.
  	@param ttitulo Tamanho do vetor com os indices secundarios por titulo.
  	@param ttipo Tamanho do vetor com os indices secundarios por tipo.
  	@param tautor Tamanho do vetor com os indices secundarios por autor.
  	@param tano Tamanho do vetor com os indices secundarios por ano.

                                         */
void remocao(pNo_PK *obras, pNo_PK *sk_titulo, pNo_PK *sk_tipo, pNo_PK *sk_autor, pNo_PK *sk_ano, int *tamanho, int ttitulo, int ttipo, int tautor, int tano);


/** 
	@brief Remove o registro da base de dados.
		/details Essa funcao armazena o NRR apontado pelo registro deletado (que sera sobreescrito) e copia para a cabeca da avail list.
		
		@param busca Struct contendo o titulo e obra que sera removido

		*/
void remove_base(pNo_PK busca);


/**
	@brief Remove o registro de todos os indices secundarios.
		
		/details Essa funcao basicamente quebra a string da chave a ser procurada em palavras, em seguida chama a funcao auxiliar que ira procurar no vetor contendo o indice, pegar NRR e remover do arquivo contendo os titulos. Essa funcao tambem chama a auxiliar uma vez para a string inteira. Eh usada para todos os quatro tipos de indices secundarios.

		@param chave Recebe a chave secundaria a ser procurada (titulo, tipo, autor ou ano).
		@param tamanho Tamanho do vetor de indices secundarios.
		@param SK Vetor de indice secundario.
		@param arquivo Arquivo de indice secundario correspondente, contendo uma lista invertida com as obras.
		@param titulo Titulo da obra a ser removida.
		@param position  Posicao da cabeca da avail list no arquivo "avail_head" (essa posicao eh definida por um #define).
		@param tam_str Maximo tamanho possivel da string de indice secundario a ser procurada.
	*/
void remove_SK(char *chave, int tamanho, pNo_PK *SK, FILE *arquivo, char *titulo, int position, int tam_str);


/**
	@brief Auxiliar de remocao do arquivo contendo os indices secundarios.

		@param chave Recebe a chave secundaria a ser procurada (titulo, tipo, autor ou ano).
		@param tamanho Tamanho do vetor de indices secundarios.
		@param SK Vetor de indice secundario.
		@param arquivo Arquivo de indice secundario correspondente, contendo uma lista invertida com as obras.
		@param titulo Titulo da obra a ser removida.
		@param position  Posicao da cabeca da avail list no arquivo "avail_head" (essa posicao eh definida por um #define).
	*/
void remove_aux(char *chave, int tamanho, pNo_PK *SK, FILE *arquivo, char *titulo, int position);


/**
	@brief Remove o registro do vetor de indice primario.

		@param titulo Titulo a ser removido do vetor.
		@param obras Vetor contendo os indices primarios.
		@param tam_nrr Tamanho do vetor de indices.

	*/
void remove_PK(char *titulo, pNo_PK *obras, int *tam_nrr);

